#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N, M;
    cin >> N >> M;
    vector<vector<pair<int,int>>> g(N+1);
    for(int i = 0; i < M; i++){
        int A, B, W;
        cin >> A >> B >> W;
        g[A].emplace_back(B, W);
    }

    const int MAXX = 1<<10;               // 0..1023
    static bitset<1024> vis[1001];        // vis[u][x] = 是否到过 (u, x)
    queue<pair<int,int>> q;
    vis[1].set(0);
    q.emplace(1, 0);

    while(!q.empty()){
        auto [u, x] = q.front(); q.pop();
        for(auto &[v, w] : g[u]){
            int nx = x ^ w;
            if(!vis[v].test(nx)){
                vis[v].set(nx);
                q.emplace(v, nx);
            }
        }
    }

    // 在所有 x 中找最小一个，使得 (N, x) 可达
    for(int x = 0; x < MAXX; x++){
        if(vis[N].test(x)){
            cout << x << "\n";
            return 0;
        }
    }
    cout << -1 << "\n";
    return 0;
}
